package org.funtester.performance.books.chapter02.section6;

import java.util.concurrent.Phaser;

/**
 * Phaser演示类
 */
public class PhaserDemo {

    public static void main(String[] args) throws InterruptedException {
        Phaser phaser = new Phaser(1);//创建Phaser对象，将参与的线程数初始化为1
        for (int i = 0; i < 3; i++) {//创建并启动3个线程
            phaser.register();//每创建并启动一个线程，注册一次
            new Thread(() -> {//创建异步线程
                phaser.arrive();//每个线程执行完任务后，通知phaser，当前线程任务完成
                System.out.println(System.currentTimeMillis() + "  完成完成 " + Thread.currentThread().getName());//打印当前线程完成任务的时间和线程名称
            }).start();//启动异步线程
        }
        System.out.println(System.currentTimeMillis() + "  完成任务总数: " + phaser.getArrivedParties());//打印已经完成任务的线程数
        Thread.sleep(10);//等待10毫秒
        System.out.println(System.currentTimeMillis() + "  完成任务总数: " + phaser.getArrivedParties());//打印已经完成任务的线程数
        phaser.arriveAndAwaitAdvance();//通知phaser，当前线程任务完成，并等待其他线程完成任务
        System.out.println(System.currentTimeMillis() + "  完成任务总数: " + phaser.getArrivedParties());//打印已经完成任务的线程数
    }

}
